package bdd;

import beans.*;
import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

public class QueriesCommandes {

    Connection cnx;
    Date dateZero = new Date(0);

    public QueriesCommandes() throws ClassNotFoundException, SQLException {
        cnx = ConnectBDD.getSingleton();
    }

    /*===================================================================*/
    // Liste de ttes les Commandes
    // ---> Si cmdId = 0 on liste ttes les cmdes
    // --> Retourne une liste de toutes les Commandes avec Jointures (array)
    /*===================================================================*/
    public ArrayList<CmdCommande> cmdAfficherCommandes(int cliId) throws SQLException {
        ArrayList<CmdCommande> listCommandesJoin = new ArrayList();


        String req1 = "SELECT DISTINCT LIG.CMD_ID, CMD_DATE, LIV_TITRE, LIV_SOUSTITRE,"
                + " LIV_PRIXHT, AUT_NOM, AUT_PRENOM,  LIV_QTE FROM TJ_LIGNES_COM LIG"
                + " JOIN T_COMMANDES C ON LIG.CMD_ID=C.CMD_ID JOIN T_LIVRES L ON LIG.LIV_ID=L.LIV_ID"
                + " JOIN TJ_AUTEURS_AUT AA ON L.LIV_ID=AA.LIV_ID"
                + " JOIN T_AUTEURS A ON AA.AUT_ID=A.AUT_ID"
                + " WHERE CLI_ID=" + cliId;



        Statement stm = cnx.createStatement();

        ResultSet res = stm.executeQuery(req1);

        while (res.next()) {
            CmdCommande cmdCommandesJoin = new CmdCommande();

            cmdCommandesJoin.setCmdId(res.getInt("CMD_ID"));
            cmdCommandesJoin.setCmdDate(res.getDate("CMD_DATE"));
            cmdCommandesJoin.setLigCommande(res.getInt("LIG_QTE"));
            cmdCommandesJoin.setLivTitre(res.getString("LIV_TITRE"));
            cmdCommandesJoin.setLivSousTitre(res.getString("LIV_SOUSTITRE"));
            cmdCommandesJoin.setLivPrixHt(res.getFloat("LIV_PRIXHT"));
            cmdCommandesJoin.setAutNom(res.getString("AUT_NOM"));
            cmdCommandesJoin.setAutPrenom(res.getString("AUT_PRENOM"));

            listCommandesJoin.add(cmdCommandesJoin);
        }

        return listCommandesJoin;
    }

    /*===================================================================*/
    // Liste de ttes les Lignes de Commandes
    // --> Retourne une liste de toutes les Lignes de Commandes (array)
    /*===================================================================*/
    public ArrayList<CmdLignesCmde> cmdAfficherLignes() throws SQLException {
        ArrayList<CmdLignesCmde> listLignesJoin = new ArrayList();

        String req02 = "select "
                + " T_COMMANDES.CMD_ID,"
                + " TJ_LIGNES_COM.LIV_ID,"
                + " T_LIVRES.LIV_TITRE,"
                + " TJ_LIGNES_COM.LIG_QTE,"
                + " T_LIVRES.LIV_PRIXHT,"
                + " T_TVA.TVA_TAUX"
                + " from TJ_LIGNES_COM"
                + " inner join T_COMMANDES on T_COMMANDES.CMD_ID = TJ_LIGNES_COM.CMD_ID"
                + " inner join T_LIVRES on T_LIVRES.LIV_ID = TJ_LIGNES_COM.LIV_ID"
                + " inner join T_TVA on T_TVA.TVA_ID = T_LIVRES.TVA_ID";

        System.out.println(req02);
        Statement stm02 = cnx.createStatement();
        ResultSet res02 = stm02.executeQuery(req02);

        while (res02.next()) {
            CmdLignesCmde cmdLignesJoin = new CmdLignesCmde();

            cmdLignesJoin.setCmdID(res02.getInt("CMD_ID"));

            cmdLignesJoin.setLivID(res02.getInt("LIV_ID"));
            cmdLignesJoin.setLivTitre(res02.getString("LIV_TITRE"));

            cmdLignesJoin.setLigQte(res02.getInt("LIG_QTE"));

            cmdLignesJoin.setTvaTaux(res02.getFloat("TVA_TAUX"));

            listLignesJoin.add(cmdLignesJoin);
        }
        return listLignesJoin;
    }

    /*===================================================================*/
    // Liste de ttes les Lignes de Commandes
    // --> Prend un id de cmde en parametre
    // --> Retourne une liste des Lignes d'une Commmande donnée (array)
    /*===================================================================*/
    public ArrayList<CmdDetailCmde> cmdAfficherLignesCmde(int cmdId) throws SQLException {
        ArrayList<CmdDetailCmde> listLignesJoin = new ArrayList();


        String req03 = "SELECT DISTINCT LIG.CMD_ID, CMD_DATE, LIV_TITRE, LIV_SOUSTITRE,"
                + " LIV_PRIXHT, AUT_NOM, AUT_PRENOM,  LIG_QTE,"
                + " ADR_RUE1, ADR_RUE2, ADR_VILLE, ADR_CP, ADR_PAYS, ADR_SOCIETE,"
                + " ENV_DATE, ENV_NUMEROCOLIS,"
                + " STA_LABEL"
                + " FROM TJ_LIGNES_COM LIG"
                + " JOIN T_COMMANDES C ON LIG.CMD_ID=C.CMD_ID JOIN T_LIVRES L ON LIG.LIV_ID=L.LIV_ID"
                + " JOIN TJ_AUTEURS_AUT AA ON L.LIV_ID=AA.LIV_ID"
                + " JOIN T_AUTEURS A ON AA.AUT_ID=A.AUT_ID"
                + " JOIN T_ENVOIS E ON C.ENV_ID=E.ENV_ID"
                + " JOIN T_STATUS_COM S ON C.STA_ID=S.STA_ID"
                + " JOIN T_ADR AD ON AD.CLI_ID=C.CLI_ID"
                + " WHERE LIG.CMD_ID=" + cmdId;

//        String req03 = "SELECT "
//                +"LIG.CMD_ID, T_COMMANDES.CMD_DATE,"
//                +"LIV_TITRE, LIV_SOUSTITRE,"
//                +"AUT_NOM, AUT_PRENOM"
//                +"FROM TJ_LIGNES_COM LIG " 
//                +"INNER JOIN T_COMMANDES ON LIG.CMD_ID=T_COMMANDES.CMD_ID"
//                +"INNER JOIN TJ_AUTEURS_AUT A ON LIG.LIV_ID=A.LIV_ID"
//                +"INNER JOIN T_LIVRES LIV ON A.LIV_ID=LIV.LIV_ID"
//                +"INNER JOIN T_AUTEURS ON A.AUT_ID=T_AUTEURS.AUT_ID"
//                +"WHERE LIG.CMD_ID = "+ cmdId;


//        String req1="SELECT DISTINCT GEN_LABEL"
//        +"FROM T_LIVRES"
//        +"JOIN T_GENRES ON T_LIVRES.GEN_ID=T_GENRES.GEN_ID";

        System.out.println(req03);
        Statement stm03 = cnx.createStatement();
        ResultSet res03 = stm03.executeQuery(req03);

        while (res03.next()) {
            CmdDetailCmde cmdLignesJoin = new CmdDetailCmde();

            cmdLignesJoin.setCmdId(res03.getInt("CMD_ID"));
            cmdLignesJoin.setCmdDate(res03.getDate("CMD_DATE"));
            cmdLignesJoin.setLigCommande(res03.getInt("LIG_QTE"));
            cmdLignesJoin.setLivTitre(res03.getString("LIV_TITRE"));
            cmdLignesJoin.setLivSousTitre(res03.getString("LIV_SOUSTITRE"));
            cmdLignesJoin.setLivPrixHt(res03.getFloat("LIV_PRIXHT"));
            cmdLignesJoin.setAutNom(res03.getString("AUT_NOM"));
            cmdLignesJoin.setAutPrenom(res03.getString("AUT_PRENOM"));
            cmdLignesJoin.setAdrRue1(res03.getString("ADR_RUE1"));
            cmdLignesJoin.setAdrRue2(res03.getString("ADR_RUE2"));
            cmdLignesJoin.setAdrVille(res03.getString("ADR_VILLE"));
            cmdLignesJoin.setAdrCp(res03.getString("ADR_CP"));
            cmdLignesJoin.setAdrPays(res03.getString("ADR_PAYS"));
            cmdLignesJoin.setAdrSociete(res03.getString("ADR_SOCIETE"));
            cmdLignesJoin.setStaLabel(res03.getString("STA_LABEL"));
            cmdLignesJoin.setEnvDate(res03.getDate("ENV_DATE"));
            cmdLignesJoin.setEnvNumeroColis(res03.getString("ENV_NUMEROCOLIS"));

            listLignesJoin.add(cmdLignesJoin);
        }
        return listLignesJoin;
    }
}
